package kr.co.bettersoft.sendme.activity;


import kr.co.bettersoft.sendme.provider.SendMeLog;
import kr.co.bettersoft.sendme.rest.SendMeLogRest;
import kr.co.bettersoft.sendme.util.SendMeActivityManager;
import kr.co.bettersoft.sendme.util.SendMeCommon;
import kr.co.bettersoft.sendme.util.SendMeConstant;
import kr.co.bettersoft.sendme.activity.R;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
/**
 * 설정 액티비티
 *  안드로이드 기본 preference 를 사용하지 않고 액티비티로 구현
 * @author blue
 *
 */
public class SendMeSettingsActivity extends Activity {

	public static String TAG = SendMeSettingsActivity.class.getSimpleName();
	
	
	// 액티비티 매니저를 가져 온다.
	private SendMeActivityManager sendMeActivityManager = SendMeActivityManager.getInstance();
	
	ImageButton imageButtonTopBack;
	ImageButton imageButtonTopMainMenu;
	
	TextView versionInfoTxt;			// 버전 표시 뷰
	TextView passwordOnOffTxt;			// 암호 설정 on/off 표시 뷰
	TextView messageOnOffTxt;			// 메시지 수신 on/off 표시 뷰
	
	// 터치시 동작 처리 위함
	View versionInfoLayout;			// 버전정보
	View servicePolicyLayout;		// 서비스 운영 정책
	View faqLayout;					// 도움말
	View profileSettingLayout;		// 프로필 설정
	View passwordSettingLayout;		// 암호설정
	View messageAlarmSettingLayout;	// 메시지 수신 설정
	View noticeLayout;				// 공지사항
	View requestToAdminLayout;		// 운영자에게 요청하기
	
	
	// 사용자 휴대 전화번호.
	private String PHONE_NUMBER = "";
	// 메시지 수신여부
	boolean isToggleButtonMessageReceiveOn = false;
	// 비번 (비번 설정 여부)
	String masterPassword = "";
	// 버전 정보
	String nowVerion="";
	PackageInfo packageInfo;
	
	// 로그를 남긴다
	private static final int THREAD_REGISTER_LOG = 100;

	// 화면에 설정값을 세팅한다.
	private static final int THREAD_SET_SCREEN_WITH_PREFERENCE_DATE = 112;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		// 커스텀 타이블 바를 설정 한다.
		Window window = getWindow();
		window.requestFeature(Window.FEATURE_CUSTOM_TITLE);
				
		setContentView(R.layout.activity_send_me_settings);
		
		window.setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_bar_03);
		
		// 액티비티 매니저에 담는다.
		sendMeActivityManager.addActivity(this);
		
		// 설정파일을 가져 온다.
		this.selectPreferenceMessageAlarmData();
		
		
		// 뒤로 가기 화살표 버튼을 설정 한다.
				imageButtonTopBack = (ImageButton)findViewById(R.id.imageButtonTopBack);
				imageButtonTopBack.setOnClickListener(new View.OnClickListener() {

					@Override
					public void onClick(View v) {
						// TODO Auto-generated method stub

						// 화면을 닫는다.
						sendMeActivityManager.removeActivity(SendMeSettingsActivity.this);
						finish();
					}
				});

				// 타이틀바의 메인 메뉴 버튼을 설정 한다.
				imageButtonTopMainMenu = (ImageButton)findViewById(R.id.imageButtonTopMainMenu);
				imageButtonTopMainMenu.setOnClickListener(new OnClickListener() {

					@Override
					public void onClick(View v) {
						// TODO Auto-generated method stub
						Log.i(TAG, "pressed top main menu.");

						// 메인 메뉴 화면을 출력 한다.
						Intent i = new Intent(SendMeSettingsActivity.this, SendMeMainMenuActivity.class);
						startActivity(i);
						
						// 화면을 닫는다.
						sendMeActivityManager.removeActivity(SendMeSettingsActivity.this);
						finish();
					}
				});
		
		versionInfoTxt = (TextView) findViewById(R.id.versionInfoTxt);
		passwordOnOffTxt = (TextView) findViewById(R.id.passwordOnOffTxt);
		messageOnOffTxt = (TextView) findViewById(R.id.messageOnOffTxt);
		
		/*
		 *  터치시 동작 처리
		 */
		// 버전정보
		versionInfoLayout = findViewById(R.id.versionInfoLayout);
		versionInfoLayout.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(SendMeSettingsActivity.this, SendMeSubSettingsVersionInfoActivity.class);
				startActivity(intent);
				
				// 화면을 닫는다.
				sendMeActivityManager.removeActivity(SendMeSettingsActivity.this);
				finish();
			}
		});
		// 서비스 운영 정책
		servicePolicyLayout = findViewById(R.id.servicePolicyLayout);
		servicePolicyLayout.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(SendMeSettingsActivity.this, SendMeSubSettingsServicePolicyActivity.class);
				startActivity(intent);
				
				// 화면을 닫는다.
				sendMeActivityManager.removeActivity(SendMeSettingsActivity.this);
				finish();
			}
		});
		// 도움말
		faqLayout = findViewById(R.id.faqLayout);
		faqLayout.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent webIntent = new Intent(returnThis(), SendMeWebViewActivity.class);
				webIntent.putExtra("loadingURL", SendMeConstant.FAQ_URL);					
				webIntent.putExtra("isGetMethod", "true");
				webIntent.putExtra("parentType", "settings");
				webIntent.putExtra("webViewTitle", "도움말");		
				startActivity(webIntent);
				
				// 화면을 닫는다.
				sendMeActivityManager.removeActivity(SendMeSettingsActivity.this);
				finish();
			}
		});
		// 프로필 설정
		profileSettingLayout = findViewById(R.id.profileSettingLayout);
		profileSettingLayout.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(SendMeSettingsActivity.this, SendMeSubSettingsProfileActivity.class);
				startActivity(intent);
				
				// 화면을 닫는다.
				sendMeActivityManager.removeActivity(SendMeSettingsActivity.this);
				finish();
			}
		});
		// 암호설정
		passwordSettingLayout = findViewById(R.id.passwordSettingLayout);
		passwordSettingLayout.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(SendMeSettingsActivity.this, SendMeSubSettingsPasswordActivity.class);
				startActivity(intent);
				
				// 화면을 닫는다.
				sendMeActivityManager.removeActivity(SendMeSettingsActivity.this);
				finish();
			}
		});
		// 메시지 수신 설정
		messageAlarmSettingLayout = findViewById(R.id.messageAlarmSettingLayout);
		messageAlarmSettingLayout.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(SendMeSettingsActivity.this, SendMeSubSettingsMessageAlarmActivity.class);
				startActivity(intent);
				
				// 화면을 닫는다.
				sendMeActivityManager.removeActivity(SendMeSettingsActivity.this);
				finish();
			}
		});
		// 공지사항
		noticeLayout = findViewById(R.id.noticeLayout);
		noticeLayout.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent webIntent = new Intent(returnThis(), SendMeWebViewActivity.class);
				webIntent.putExtra("loadingURL", SendMeConstant.NOTICE_URL);		
				webIntent.putExtra("isGetMethod", "true");
				webIntent.putExtra("parentType", "settings");
				webIntent.putExtra("webViewTitle", "공지사항");		
				startActivity(webIntent);
				
				// 화면을 닫는다.
				sendMeActivityManager.removeActivity(SendMeSettingsActivity.this);
				finish();
			}
		});
		// 운영자에게 요청하기
		requestToAdminLayout = findViewById(R.id.requestToAdminLayout);
		requestToAdminLayout.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(SendMeSettingsActivity.this, SendMeSubSettingsRequestToAdminActivity.class);
				startActivity(intent);
				
				// 화면을 닫는다.
				sendMeActivityManager.removeActivity(SendMeSettingsActivity.this);
				finish();
			}
		});
		
		
		
		
		
				
		// 로깅.
		mHandler.sendMessage(mHandler.obtainMessage(THREAD_REGISTER_LOG));
//		
//		// 세팅한다.
//		mHandler.sendMessage(mHandler.obtainMessage(THREAD_SET_SCREEN_WITH_PREFERENCE_DATE));
		
	}

//	public void setPreferenceDataToScreen(){
//		
//		// 메시지 수신 알림 설정
//		if(isToggleButtonMessageReceiveOn){
//			toggleButtonMessageReceiveOnOff.setChecked(true);
//		}else{
//			toggleButtonMessageReceiveOnOff.setChecked(false);
//		}
//		// 메시지 팝업 알림 설정
//		if(isToggleButtonMessagePopUpOn){
//			toggleButtonMessagePopUpOnOff.setChecked(true);
//		}else{
//			toggleButtonMessagePopUpOnOff.setChecked(false);
//		}
//		
//		// 알림 방법 설정
//		switch(checkedRadioGroupMessageAlarmMethod){
//		case 1:
//			radioGroupMessageAlarmMethod.check(R.id.radio_btn_sound);
//			break;
//		case 2:
//			radioGroupMessageAlarmMethod.check(R.id.radio_btn_vibration);
//			break;
//		case 3:
//			radioGroupMessageAlarmMethod.check(R.id.radio_btn_no_sound);
//			break;
//		}
//		
//		// 알림 소리 설정
//		switch(checkedRadioGroupMessageAlarmMethodSound){
//		case 1:
//			radioGroupMessageAlarmMethodSound.check(R.id.radio_btn_sound_default);
//			break;
//		case 2:
//			radioGroupMessageAlarmMethodSound.check(R.id.radio_btn_sound_type_a);
//			break;
//		case 3:
//			radioGroupMessageAlarmMethodSound.check(R.id.radio_btn_sound_type_b);
//			break;
//		}
//	}
	
	
	/**
	 * 목록을 세팅해서 출력 한다.
	 */
	private Runnable setPreferenceDataToScreenOnUiThread = new Runnable() {

		@Override
		public void run() {
//			// 메시지 수신 알림 설정
//			if(isToggleButtonMessageReceiveOn){
//				toggleButtonMessageReceiveOnOff.setChecked(true);
//			}else{
//				toggleButtonMessageReceiveOnOff.setChecked(false);
//			}
//			// 메시지 팝업 알림 설정
//			if(isToggleButtonMessagePopUpOn){
//				toggleButtonMessagePopUpOnOff.setChecked(true);
//			}else{
//				toggleButtonMessagePopUpOnOff.setChecked(false);
//			}
//			
//			// 알림 방법 설정
//			switch(checkedRadioGroupMessageAlarmMethod){
//			case 1:
//				radioGroupMessageAlarmMethod.check(R.id.radio_btn_sound);
//				break;
//			case 2:
//				radioGroupMessageAlarmMethod.check(R.id.radio_btn_vibration);
//				break;
//			case 3:
//				radioGroupMessageAlarmMethod.check(R.id.radio_btn_no_sound);
//				break;
//			}
//			
//			// 알림 소리 설정
//			switch(checkedRadioGroupMessageAlarmMethodSound){
//			case 1:
//				radioGroupMessageAlarmMethodSound.check(R.id.radio_btn_sound_default);
//				break;
//			case 2:
//				radioGroupMessageAlarmMethodSound.check(R.id.radio_btn_sound_type_a);
//				break;
//			case 3:
//				radioGroupMessageAlarmMethodSound.check(R.id.radio_btn_sound_type_b);
//				break;
//			}
		}
	};
	
	/**
	 * Handler 를 정의 한다.
	 * 모든 Thread 를 등록해 놓고 호출 한다.
	 */
	private Handler mHandler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			switch(msg.what) {
			
			// 로그를 남긴다
			case THREAD_REGISTER_LOG : 
				threadRegisterLog();
				break;
//			// 정보 저장에 성공했다는 toast 를 띄운다.
//			case THREAD_SUCCESS_SAVE_INFO : 
//				showToastSuccessSaveInfo();
//				break;
//			// 정보 저장에 실패했다는 dialog 를 띄운다.
//			case THREAD_FAIL_SAVE_INFO : 
//				showToastFailSaveInfo();
//				break;
				
			// 화면에 설정 값을 세팅한다.
			case THREAD_SET_SCREEN_WITH_PREFERENCE_DATE:
//				setPreferenceDataToScreen();
				runOnUiThread(setPreferenceDataToScreenOnUiThread);
				break;

			}
		}
	};

	
	
	public Context returnThis(){
		return this;
	}
	
	
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	/**
//	 * backgroundThreadSaveMessageAlarm
//	 * 비동기  .  설정에 이름 저장
//	 * @author blue
//	 *
//	 */
//	public class backgroundThreadSaveMessageAlarm extends AsyncTask<Void, Void, Void>{
//		private ProgressDialog dialog;
//		@Override protected void onPostExecute(Void result) {  
//			dialog.dismiss();
//		} 
//		@Override protected void onPreExecute() {  
//			dialog = ProgressDialog.show(SendMeSettingsActivity.this, "", "Save..", true);
//		} 
//		@Override protected Void doInBackground(Void... params) {  
//			Log.d(TAG,"backgroundThreadSaveMessageAlarm");
//			savePreferenceMessageAlarmData();
//			return null; 
//		}
//	}
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// 서버 통신
	
//	/**
//	 * 인증번호를 요청 한다.
//	 */
//	public void threadRequestCertification() {
//		// 프로그레스 바를 출력 한다.
//		mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_VISIBLE));
//		
//		Thread thread = new Thread(new Runnable() {
//
//			public void run() {
//				// TODO Auto-generated method stub
//				SendMeCommon sendMeCommon = new SendMeCommon();
//				
//				SendMeCertification sendMeCertification = new SendMeCertification();
//				sendMeCertification.setPhoneNumber(editTextPhoneNumber.getText().toString());
//				sendMeCertification.setActivateYn("Y");
//				sendMeCertification.setModifyDate(sendMeCommon.getCurrentDate());
//				sendMeCertification.setRegisterDate(sendMeCommon.getCurrentDate());
//				
//				// 요청 후 사용자 휴대전화버호를 임시로 저장한다.
//				tempPhoneNumber = editTextPhoneNumber.getText().toString();
//				
//				SendMeCertificationRest sendMeRest = new SendMeCertificationRest();
//				SendMeCertification result = new SendMeCertification();
//				result = sendMeRest.requestCertification(sendMeCertification);
//				Log.i(TAG, "result : " + result.getResult());
//				
//				// 프로그레스 바를 감춘다.
//				mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_INVISIBLE));
//				
//				// 인증번호 요청에 성공하면 toast 를 띄워서 알려준다.
//				if(("SUCCESS").equals(result.getResult())) {
//					certificationNumber = result.getCertificationNumber();
//					
//					mHandler.sendMessage(mHandler.obtainMessage(THREAD_SMS_SEND_CERTIFICATION));
//					mHandler.sendMessage(mHandler.obtainMessage(THREAD_SET_CERTIFICATION_NUMBER));
//				}
//			}
//			
//		});
//		
//		thread.start();
//	}
	
	
	/**
	 * 로그를 남긴다	 
	 */
	public void threadRegisterLog() {
		Thread thread = new Thread(new Runnable() {
			public void run() {
				
				SendMeCommon sendMeCommon = new SendMeCommon();
				String nowTime = sendMeCommon.getCurrentDate();
				
				SendMeLog sendMeLog = new SendMeLog();
				sendMeLog.setPhoneNumber(PHONE_NUMBER);
				sendMeLog.setViewName(TAG);
				sendMeLog.setRegisterDate(nowTime);
				
				SendMeLogRest sendMeLogRest = new SendMeLogRest();
				
				sendMeLogRest.registerLog(sendMeLog);
			}
		});
		thread.start();
	}
	
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// 사용자 알림
	
	/**
	 * 정보 저장에 성공했다는 toast 를 띄운다.
	 */
	public void showToastSuccessSaveInfo() {
		CharSequence text = "변경사항이 저장되었습니다.";
		Toast toast = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT);
		toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL, 0, 0);
		toast.show();
	}
	/**
	 * 정보 저장에 실패했다는 toast 를 띄운다.
	 */
	public void showToastFailSaveInfo() {
		CharSequence text = "저장이 실패했습니다.";
		Toast toast = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT);
		toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL, 0, 0);
		toast.show();
	}
	
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 닫기 관련
	/*
	 * 종료한다
	 */
	public void finishActivity(){
		sendMeActivityManager.removeActivity(SendMeSettingsActivity.this);
		finish();
	}
//	/**
//	 * 뒤로 가기 버튼을 정의 한다.
//	 * 설치단계이기 때문에 뒤로가기 버튼을 터치하면 앱을 종료 한다.
//	 */
//	@Override
//	public void onBackPressed() {
//		// TODO Auto-generated method stub
//		mHandler.sendMessage(mHandler.obtainMessage(ALERT_DIALOG_EXIT_ID));
//	}
//	
//	/**
//	 * 뒤로가기 버튼을 터치하면 alert 창을 띄우고 앱을 종료한다.
//	 */
//	private void showDialogSystemExit() {
//		new AlertDialog.Builder(SendMeSubSettingsMessageAlramActivity.this)
//		.setTitle("프로그램 종료")
//		.setMessage("SendMe 를 종료하시겠습니까?")
//		.setNegativeButton("취소", new DialogInterface.OnClickListener() {
//
//			@Override
//			public void onClick(DialogInterface dialog, int which) {
//
//			}
//		})
//		.setPositiveButton("확인", new DialogInterface.OnClickListener() {
//			
//			@Override
//			public void onClick(DialogInterface dialog, int which) {
//				// TODO Auto-generated method stub
//				sendMeActivityManager.finishAllActivity();
//			}
//		}).show();
//	}
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// preference 
	/**
	 * SharedPreference 정보를 확인 한다.
	 */
	public void selectPreferenceMessageAlarmData() {
		SharedPreferences mSharedPreference = getSharedPreferences(SendMeConstant.SENDME_PREFERENCE, Activity.MODE_PRIVATE);
		
		PHONE_NUMBER = mSharedPreference.getString("phone_number", "");
		isToggleButtonMessageReceiveOn = mSharedPreference.getBoolean("setting_message_receive_on", true);
		masterPassword = mSharedPreference.getString("master_password", "");  
		
//		isToggleButtonMessagePopUpOn  = mSharedPreference.getBoolean("setting_message_popup_on", true);
//		checkedRadioGroupMessageAlarmMethod  = mSharedPreference.getInt("setting_message_alarm_method", 2);
//		checkedRadioGroupMessageAlarmMethodSound  = mSharedPreference.getInt("setting_message_alarm_method_sound", 1);
	}
//	/**
//	 * 설정파일에 저장한다
//	 */
//	public void savePreferenceMessageAlarmData() {
//		try{
//			SharedPreferences sharedPreferences = getSharedPreferences(SendMeConstant.SENDME_PREFERENCE, Activity.MODE_PRIVATE);
//			SharedPreferences.Editor editor = sharedPreferences.edit();
//			editor.putBoolean("setting_message_receive_on", isToggleButtonMessageReceiveOn);
//			editor.putBoolean("setting_message_popup_on", isToggleButtonMessagePopUpOn);
//			editor.putInt("setting_message_alarm_method", checkedRadioGroupMessageAlarmMethod);
//			editor.putInt("setting_message_alarm_method_sound", checkedRadioGroupMessageAlarmMethodSound);
//			editor.commit();
//			mHandler.sendMessage(mHandler.obtainMessage(THREAD_SUCCESS_SAVE_INFO));
//			finishActivity();
//		}catch(Exception e){
//			mHandler.sendMessage(mHandler.obtainMessage(THREAD_FAIL_SAVE_INFO));
//		}
//	}

	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	
	@Override
	public void onResume(){
		super.onResume();
		
		// 설정파일을 가져 온다.
		this.selectPreferenceMessageAlarmData();
		
		// 버전 정보 화면에 세팅
		try {
			packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
			nowVerion = packageInfo.versionName;
			versionInfoTxt.setText(nowVerion);
		} catch (NameNotFoundException e) {
			e.printStackTrace();
		}
		// 메시지 수신 여부 화면에 세팅
		if(isToggleButtonMessageReceiveOn){
			messageOnOffTxt.setText("ON");
		}else{
			messageOnOffTxt.setText("OFF");
		}
		// 암호 설정 여부 화면에 세팅		masterPassword
		if(masterPassword.length()>0){
			passwordOnOffTxt.setText("ON");
		}else{
			passwordOnOffTxt.setText("OFF");
		}
	}
	
}
